import os
from celery import Celery
from celery.signals import after_setup_logger
import logging

# 设置django的settings模块，celery会读取这个模块中的配置信息
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'oaback_manage.settings')

app = Celery('oaback_manage')

## 日志管理
@after_setup_logger.connect
def setup_loggers(logger, *args, **kwargs):
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    # add filehandler
    # 以后日志管理的配置信息 就会放到celery.log文件中
    fh = logging.FileHandler('celery.log')
    fh.setLevel(logging.DEBUG)
    fh.setFormatter(formatter)
    logger.addHandler(fh)

# 配置从settins.py中读取celery配置信息，所有Celery配置信息都要以CELERY_开头
# 配置celery从哪里读取配置信息 这里配置是从django.conf:settings读取
# 如果在运行之前还没有设置好的情况下 可能读取不到 所以在上面设置了DJANGO_SETTINGS_MODULE，以防读取不到
# 以后再settings文件中关于celery的配置 都要以CELERY开头 且后面单词以_字母都要为大写
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现任务，任务可以写在app/tasks.py中
# 会自动到settings文件中已经安装好的app文件夹下即在INSTALLED_APPS中安装的app 寻找task.py文件 然后执行
app.autodiscover_tasks()


# 测试任务
# bind=True 在任务函数中 第一个参数就是任务对象 如果没有设置这个参数 或者是bind=False 那么任务函数中就不会有任务对象参数 比如debug_task中第一个参数就是任务对象参数
@app.task(bind=True, ignore_result=True)
def debug_task(self):
    print('xxxxxxxxxxxxxxxxxxxxxxxxxx')